package com.yf.service.chat;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yf.model.ai.form.UserChatConfigForm;
import com.yf.model.ai.query.UserChatConversationPageQuery;
import com.yf.model.ai.query.UserChatMessagePageQuery;
import com.yf.model.ai.query.UserChatToolPageQuery;
import com.yf.model.ai.vo.UserChatConversationDetailVO;
import com.yf.model.ai.vo.UserChatConversationVO;
import com.yf.model.ai.vo.UserChatMaskVO;
import com.yf.model.ai.vo.UserChatMessageVO;
import com.yf.model.ai.vo.UserChatToolProviderVO;
import com.yf.model.ai.vo.UserChatToolVO;

import java.util.List;
import java.util.Set;

/**
 * @author : YiFei
 * @since : 2025/7/12 11:37
 */
public interface IUserChatService {

    /**
     * 获取AI会话分页数据
     *
     * @param queryParams 分页查询参数
     * @return 分页数据
     */
    IPage<UserChatConversationVO> getAiConversationPage(UserChatConversationPageQuery queryParams);

    /**
     * 获取AI消息记录分页数据
     *
     * @param queryParams 分页查询参数
     * @return 分页数据
     */
    IPage<UserChatMessageVO> getAiMessagePage(UserChatMessagePageQuery queryParams);

    /**
     * 查询所有工具
     *
     * @param queryParams 分页查询参数
     * @return 分页数据
     */
    IPage<UserChatToolVO> getToolPage(UserChatToolPageQuery queryParams);

    /**
     * 获取AI全部可用面具
     *
     * @param maskName 面具名称
     * @return 面具列表
     */
    List<UserChatMaskVO> getAllMasks(String maskName);

    /**
     * 会话绑定工具
     *
     * @param conversationId 会话Id
     * @param toolIds        工具Id集合
     * @return 是否绑定成功
     */
    boolean conversationBindTools(Long conversationId, Set<Integer> toolIds);

    /**
     * 会话绑定面具
     *
     * @param conversationId 会话Id
     * @param maskId         面具Id
     * @return 是否绑定成功
     */
    boolean conversationBindMask(Long conversationId, Integer maskId);

    /**
     * 修改会话标题
     *
     * @param conversationId 会话Id
     * @param title          会话标题
     * @return 是否修改成功
     */
    Boolean updateConversationTitle(Long conversationId, String title);

    /**
     * 删除会话
     *
     * @param conversationIds 会话Id集合
     * @return 是否删除成功
     */
    Boolean removeConversation(Set<Long> conversationIds);

    /**
     * 删除会话聊天消息
     *
     * @param messageId      聊天消息Id
     * @param conversationId 会话Id
     * @return 是否删除成功
     */
    boolean removeMessage(Long messageId, Long conversationId);

    /**
     * 查询会话详情
     *
     * @param conversationId 会话Id
     * @return 会话详情
     */
    UserChatConversationDetailVO getConversationDetail(Long conversationId);

    /**
     * 更新会话配置
     *
     * @param conversationId 会话Id
     * @param form           配置表单
     * @return 是否更新成功
     */
    Boolean updateConversationConfig(Long conversationId, UserChatConfigForm form);

    /**
     * 更新AI会话标题
     *
     * @param conversationId 会话Id
     * @return 更新后的标题
     */
    String updateAiConversationTitle(Long conversationId);

    /**
     * 获取草稿会话
     *
     * @return 草稿会话Id
     */
    Long getDraftConversations();

    /**
     * 获取工具提供者
     *
     * @return 工具提供者列表
     */
    List<UserChatToolProviderVO> getToolProvider();
}
